// 第一类斯特林数 斯特林轮换数
// 将 n 个不同元素，划分为 m 个非空圆排列的方案数，记作 S[n][m]
// S[0][0] = 1, S[i][0] = 0
// 递推式 ：S[i][j] = S[i - 1][j - 1] + (i - 1) * S[i - 1][j]
// 在数轴上建 n 个建筑，它们的高度是从 1 到 n 之间的整数，
// 从最左边看能看到 a 个建筑，从最右边看能看到 b 个建筑，
// 问满足上述条件的建筑方案有多少种？
// n <= 50000，a, b <= 100，T <= 200000
// 测试链接 ：https://www.luogu.com.cn/problem/P4609
// 相关帖子 ：https://www.cnblogs.com/dx123/p/17024548.html
// 相关帖子 ：https://oi-wiki.org/math/combinatorics/stirling/
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 50001;
const int MAXM = 210;
const int P = 1e9 + 7;
long long S[MAXN][MAXM], C[MAXM][MAXM];

void init()
{
    S[0][0] = 1;
    for(int i = 1; i < MAXN; ++i)
    {
        for(int j = 1; j < MAXM; ++j)
        {
            S[i][j] = (S[i - 1][j - 1] + (i - 1) * S[i - 1][j]) % P;
        }
    }
    for(int i = 0; i < MAXM; ++i) C[i][0] = 1;
    for(int i = 1; i < MAXM; ++i)
    {
        for(int j = 1; j <= i; ++j)
        {
            C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % P;
        }
    }
}

int main()
{
    init();
    int t, n, a, b, ans;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d%d%d", &n, &a, &b);
        ans = S[n - 1][a + b - 2] * C[a + b - 2][a - 1] % P;
        printf("%d\n", ans);
    }

    return 0;
}